package com.wang.tool.idem;


import com.wang.tool.idem.core.IdemBody;
import com.wang.tool.idem.core.IdemEntity;
import com.wang.tool.lock.core.LockBody;

import java.util.function.Supplier;

/**
 * @author shaopeng
 * @date 2023/5/23
 */
class Demo {


    public static void main(String[] args) {
//        简单易用的幂等服务
//        幂等严谨做法是  先锁再幂等 所以幂等服务天然依赖锁服务
//        一次配置，spring中引用

//        初始化幂等server
        IdemServer server = new IdemServer(){
            @Override
            public IdemEntity getValidEntity(String namespace, String idemId) {
//                获取已经可用的幂等结果
                return null;
            }

            @Override
            public void storeEntity(String namespace, String idemId, IdemEntity entity) {
//              存储幂等
            }

            @Override
            protected IdemEntity lockDo(LockBody body, Supplier<IdemEntity> action) {





                return null;
            }
        };


//        迷瞪参数
        IdemBody idemBody = IdemBody.build("common","迷瞪id");

//        可选参数：如果需要先锁再幂等则可以配置此参数
        LockBody lockBody = LockBody.build("common","testKey");
        idemBody.setLockBody(lockBody);

//        幂等执行
        IdemEntity result = server.idemDo(idemBody, new Supplier<IdemEntity>() {
            @Override
            public IdemEntity get() {
//                迷瞪未命中，执行业务逻辑
                return null;
            }
        });

    }
}
